package com.wenx.v3system.modular.cloud.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.wenx.base.rest.BaseRestService;
import com.wenx.v3system.modular.cloud.domain.dto.SysPermissionDto;
import com.wenx.v3system.modular.cloud.domain.po.SysPermission;
import com.wenx.v3system.modular.cloud.domain.query.SysPermissionQuery;

import java.util.List;
import java.util.Map;

/**
 * 系统权限RestService接口
 * 继承BaseRestService以支持标准化CRUD操作
 * 同时保留权限特有的功能
 * 
 * @author wenx
 * @since 1.0.0
 */
public interface SysPermissionRestService extends IService<SysPermission>, BaseRestService<SysPermissionDto, SysPermissionQuery> {

    /**
     * 获取权限树
     * 
     * @param type 权限类型
     * @param status 状态
     * @return 权限树
     */
    List<SysPermissionDto> getPermissionTree(String type, String status);

    /**
     * 获取菜单权限树
     *
     * @return 菜单权限树
     */
    List<SysPermissionDto> getMenuTree();

    /**
     * 获取菜单权限
     *
     * @return 菜单权限树
     */
    List<SysPermissionDto> getMenuAll();

    /**
     * 移动权限
     * 
     * @param permissionId 权限ID
     * @param targetParentId 目标父级ID
     * @param targetSort 目标排序
     */
    void movePermission(String permissionId, String targetParentId, Integer targetSort);

    /**
     * 批量更新排序
     * 
     * @param sortData 排序数据
     */
    void batchUpdateSort(List<Map<String, Object>> sortData);

    /**
     * 检查权限编码是否存在
     * 
     * @param code 权限编码
     * @param excludeId 排除的ID
     * @return 是否存在
     */
    boolean existsByCode(String code, String excludeId);

    /**
     * 获取子权限列表
     * 
     * @param parentId 父级ID
     * @return 子权限列表
     */
    List<SysPermissionDto> getChildPermissions(String parentId);

}